#pragma once

#include "IMxPluginBase.h"
#include "IPluginICProcStepsParam.h"

//class IPluginICProcStepsParamDefIID does NOT exist because you will never need to create an instance of IPluginICProcStepsParamDef. 
//Instead create instances of its derived types IPluginICProcStepsParamDefIntP, Double, String, etc

#define IPluginICProcStepsParamDefStringP "StringP"
#define IPluginICProcStepsParamDefIntP "IntP"
#define IPluginICProcStepsParamDefDoubleP "DoubleP"

#define IPluginICProcStepsParamDefBadValue "[baddef]"
#define IPluginICProcStepsParamDefBadDefaultValue "[BadDefaultValue]"
#define IPluginICProcStepsParamDefInvalidDefaultValue "[InvalidDefault]"
#define IPluginICProcStepsParamDefInvalidValue "[InvalidValue]"
#define IPluginICProcStepsParamDefInvalidDefinition "[InvalidDef]"


class IPluginICProcStepsParamDef  :  public IMxPluginBase
{
public:
	static const int Invalid = -1;
	static const int MaxIndex=50;
	static const int NotFound = -1;

	enum Direction 
	{
		input = 0L,
		output
	};

	enum TypeP 
	{
		stringP = 0L,
		intP,
		doubleP
	};

public:
	virtual int				MXSTDMETHOD GetIndex() = 0;
	virtual const char *	MXSTDMETHOD GetName() = 0;
	virtual const char *	MXSTDMETHOD GetDescription() = 0;
	virtual IPluginICProcStepsParamDef::Direction MXSTDMETHOD GetDirection() = 0;

	virtual bool			MXSTDMETHOD IsValid() = 0;
	virtual	bool			MXSTDMETHOD IsMatch (IPluginICProcStepsParam  *param, IPluginICProcStepsParamDef::Direction dir) = 0;
	virtual TypeP			MXSTDMETHOD GetTypeP() = 0;
	virtual const char *	MXSTDMETHOD GetTypeStr() = 0;
	virtual const char *	MXSTDMETHOD GetDefaultValueStr() = 0;
	virtual const char *	MXSTDMETHOD GetString() = 0;
};